#!/usr/bin/env ruby
# frozen_string_literal: true

require 'optparse'
require 'pathname'

@languages = %w[python ruby node]
@actions = %w[set get list]
@help = <<~HELP
  各种语言的切换源的场景，调用命令如：

      $ switch-mirror set node <mirror-name>
      $ switch-mirror get node
      $ switch-mirror list node

  支持的语言列表：

  #{@languages.map { |lang| "    - #{lang}" }.join("\n")}

  >> 备注：尚未开放操作系统的镜像设置。如果需要配置 openSuse 系统的仓库地址，使用 `repos` 命令。

HELP

ARGV.push('--help') if ARGV.empty?
begin
  OptionParser.new do |opts|
    opts.banner = @help
  end.order!
rescue OptionParser::ParseError => e
  warn e.message
  exit 1
end

action, lang, *params = ARGV

unless @actions.include?(action)
  warn "不支持的动作：#{action}"
  exit 1
end
unless @languages.include?(lang)
  warn "不支持的编程语言：#{lang}"
  exit 1
end

begin
  require_relative lang
  klass = SwitchMirror.const_get(lang[0].upcase + lang[1..-1])
  instance = klass.new
  instance.send(action, *params)
rescue LoadError
  # 不存在 .rb 文件
  if action != 'set'
    warn '切换回兼容模式，只支持 set 动作'
    exit 255
  end

  exec File.join(__dir__, lang), *ARGV[2..-1]
end
